# !usr/bin/env python
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: title02最少数量线段覆盖.py 
@version:
@time: 2023/05/29

https://dream.blog.csdn.net/article/details/

3
1,4
2,5
3,6


2

统计每个位置有多少条线段覆盖，然后枚举每条线段，判断该线段是否可以被删除，即判断该线段中的每个位置是否只被该线段覆盖，若满足则删除该线段，
同时将该线段中的位置的覆盖数减一，最后返回未删除的线段数量。
"""
from collections import defaultdict


def solve_method(n, points):
    line = defaultdict(int)
    # 初始化路线，每个点被覆盖的次数
    for point in points:
        for j in range(point[0], point[1] + 1):
            line[j] += 1
    del_num = 0  # 初始化删除数为0
    # 轮询每个线段
    for point in points:
        # 初始化是否可删除
        deletable = True
        # 轮询线段每个点
        for j in range(point[0], point[1] + 1):
            # 如果路线上的这点小于等于1，那么这条线段不能删除，否则无法完全覆盖，并且跳出当前线段判断循环
            if line[j] <= 1:
                deletable = False
                break
        # 如果可以删除，那么将此线段在路线上的所有点的计数都减一，并将删除数+1
        if deletable:
            for j in range(point[0], point[1] + 1):
                line[j] -= 1
            del_num += 1
    # 最后返线段数量-删除数
    return n - del_num


if __name__ == '__main__':
    n = int(input())
    points = []
    for _ in range(n):
        x, y = map(int, input().split(','))
        points.append((x, y))
    res = solve_method(n, points)
    print(res)
